package de.hypoport.einarbeitung.scrumspirit.view;

import javax.persistence.EntityManagerFactory;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

import de.hypoport.einarbeitung.scrumspirit.HomePage;
import de.hypoport.einarbeitung.scrumspirit.beans.Mitarbeiter;
import de.hypoport.einarbeitung.scrumspirit.persistence.dao.MitarbeiterDao;

public class MitarbeiterEingabePage extends WebPage {

	IModel<String> vornameModel;
	IModel<String> nachnameModel;
	IModel<String> emailModel;
	transient MitarbeiterDao mitarbeiterDao;

	@SpringBean
	transient EntityManagerFactory entityManagerFactory;

	public MitarbeiterEingabePage() {

		this.setDefaultModel(Model.of((new Mitarbeiter())));
		this.add(new FeedbackPanel("feedback").setOutputMarkupId(true)); // Feedback
		mitarbeiterDao = new MitarbeiterDao();
		if (entityManagerFactory != null) {
			mitarbeiterDao.setEntityManager(entityManagerFactory.createEntityManager());
		}

		initMyModels();

		Form<Mitarbeiter> maForm = new Form<Mitarbeiter>("form", (IModel<Mitarbeiter>) getDefaultModel()) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onSubmit() {

				try {
						Mitarbeiter mitarbeiter = new Mitarbeiter(vornameModel.getObject(), nachnameModel.getObject(),
								emailModel.getObject());
						mitarbeiterDao.store(mitarbeiter);
					this.setResponsePage(HomePage.class);

				} catch (Exception e) {
					e.printStackTrace();
				}

			}

		};

		maForm.add(new Label("VornameLabel", "Vorname:"));
		maForm.add(new Label("NachnameLabel", "Nachname:"));
		maForm.add(new Label("EmailLabel", "Emailadresse:"));

		maForm.add(new TextField<String>("VornameInput", vornameModel));
		maForm.add(new TextField<String>("NachnameInput", nachnameModel));
		maForm.add(new TextField<String>("EmailInput", emailModel));

		maForm.add(new Button("submit"));

		this.add(maForm);

	}

	public MitarbeiterEingabePage(IModel<?> iModel) {

		super(iModel);
		initMyModels();

		this.add(new FeedbackPanel("feedback").setOutputMarkupId(true)); // Feedback
		mitarbeiterDao = new MitarbeiterDao();
		if (entityManagerFactory != null) {
			mitarbeiterDao.setEntityManager(entityManagerFactory.createEntityManager());
		}

		Form<Mitarbeiter> maForm = new Form<Mitarbeiter>("form", (IModel<Mitarbeiter>) getDefaultModel()) {

			private static final long serialVersionUID = 1L;

			@Override
			protected void onSubmit() {

				try {
						Mitarbeiter mitarbeiter = (Mitarbeiter) getDefaultModel().getObject();
						mitarbeiterDao.merge(mitarbeiter);
					this.setResponsePage(HomePage.class);
				} catch (Exception e) {
					e.printStackTrace();
				}

			}

		};

		maForm.add(new Label("VornameLabel", "Vorname:"));
		maForm.add(new Label("NachnameLabel", "Nachname:"));
		maForm.add(new Label("EmailLabel", "Emailadresse:"));

		maForm.add(new TextField<String>("VornameInput", vornameModel));
		maForm.add(new TextField<String>("NachnameInput", nachnameModel));
		maForm.add(new TextField<String>("EmailInput", emailModel));

		maForm.add(new Button("submit"));

		this.add(maForm);

	}

	public void initMyModels() {

		vornameModel = new PropertyModel<String>(getDefaultModel(), "vorname");
		nachnameModel = new PropertyModel<String>(getDefaultModel(), "nachname");
		emailModel = new PropertyModel<String>(getDefaultModel(), "email");
	}

}
